// eslint-disable-next-line func-names
import path from 'path'
import JSZip from 'jszip'
import fs from 'fs'
const plugin = function (fileName, output) {
    // const path = require('path')
    if (!output) output = path.resolve(__dirname, fileName) // ./distTest是根据实际路径而来
    fileName += '.zip'
    const makeZip = function () {
    //   const path = require('path')
      const zip = new JSZip()
      const distPath = path.resolve(output)
      const readDir = function (zip, dirPath) {
        // 读取dist下的根文件目录
        const files = fs.readdirSync(dirPath)
        files.forEach((fileName) => {
          const fillPath = path.join(dirPath, './', fileName)
          const file = fs.statSync(fillPath)
          // 如果是文件夹的话需要递归遍历下面的子文件
          if (file.isDirectory()) {
            const dirZip = zip.folder(fileName)
            readDir(dirZip, fillPath)
          } else {
            // 读取每个文件为buffer存到zip中
            zip.file(fileName, fs.readFileSync(fillPath))
          }
        })
      }
      const removeExistedZip = () => {
        const dest = path.join(distPath, `./${fileName}`)
        if (fs.existsSync(dest)) {
          fs.unlinkSync(dest)
        }
      }
      const zipDir = function () {
        readDir(zip, distPath)
        zip
          .generateAsync({
            type: 'nodebuffer', // 压缩类型
            compression: 'DEFLATE', // 压缩算法
            compressionOptions: {
              // 压缩级别
              level: 9,
            },
          })
          .then((content) => {
            const dest = path.join(distPath, `../${fileName}`)
            removeExistedZip()
            // 把zip包写到硬盘中，这个content现在是一段buffer
            fs.writeFileSync(dest, content)
          })
      }
      removeExistedZip()
      zipDir(distPath)
    }
    return {
      name: 'vite-plugin-auto-zip',
      apply: 'build',
      closeBundle() {
        makeZip()
      },
    }
  }
//   module.exports = plugin
export default plugin
  
  